[LeetCode] 19 - Remove Nth Node From End of List

題意

刪除一個Singly Linked List的倒數第n個節點。

解法

使用兩個指針讓一個先走,接著同步走等到第一個指針到了最後就代表第二個指針是倒數第n個。

心得

要注意頭節點的處理。

程式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *Node1 = head , *Node2 = head ;
int i = 0 ;
while ( Node1->next != NULL && i < n ){
Node1 = Node1->next ;
i ++ ;
}
while ( Node1->next != NULL ){
Node1 = Node1->next ;
Node2 = Node2->next ;
}
if ( i >= n ){
ListNode *Node = Node2->next->next ;
Node2->next = Node ;
} else if ( i == n - 1 ){
ListNode *Node = Node2->next ;
head = Node ;
}
return head ;
}
};